package com.jrsoft.jrcore.util

import android.graphics.Paint
import android.view.View
import android.widget.TextView
import java.util.regex.Matcher
import java.util.regex.Pattern


/**
 * 所属系统: 杨梅红画院移动端
 * 所属模块: 工具模块
 * 功能描述: 通用扩展类
 * 创建时间: 2020/5/21 15:16
 * 维护人: 李主辉
 * Copyright @ Jerrisoft 2020. All rights reserved.
 *┌──────────────────────────────────────────────────────────────┐
 *│ 此技术信息为本公司机密信息，未经本公司书面同意禁止向第三方披露．   │
 *│ 版权所有：杰人软件(深圳)有限公司                                │
 *└──────────────────────────────────────────────────────────────┘
 */

/**
 * 判断字符串类型是否为空
 */
fun String?.isNull(): Boolean {
    return this == null || length == 0
}

/**
 * 防止字符串空指针
 */
fun String?.safeValue(): String {
    return this?.let { it } ?: ""
}

/**
 * 防止Boolean值空指针
 */
fun Boolean?.safeValue(): Boolean {
    return this?.let { it } ?: false
}

/**
 * 防止Int类型空指针
 */
fun Int?.safeValue(): Int {
    return this?.let { it } ?: 0
}

/**
 *如果字符串为空或"",直接返回空.方便用 ?. ?: 操作符.不用写if语句
 */
fun String?.nullDoS(): String? {
    return if (this == null || length == 0) {
        null
    } else {
        this
    }
}

/**
 * 字符串安全截取方法
 */
fun String.safeTrimString(size: Int): String {
    return if (this.length <= size) {
        this
    } else {
        substring(0, size) + "..."
    }
}


/**
 * 方便用 ?. ?: 操作符.不用写if语句  数组不为空才回返回自身,否则返回null
 */
fun <T : Collection<*>> T?.nullDoC(): T? {
    return if (this == null || isEmpty()) {
        null
    } else {
        this
    }
}

/**
 * 防止数组越界
 */
fun <T> List<T>?.getIndex(index: Int): T? {
    return this?.run {
        if (index >= 0 && this.size > index) this[index] else null
    }
}

/**
 * 防止 java.lang.StringIndexOutOfBoundsException
 */
fun String.safeSubstring(startIndex: Int): String {
    return try {
        substring(startIndex)
    } catch (e: Exception) {
        ""
    }
}

/**
 * 防止 java.lang.StringIndexOutOfBoundsException
 */
fun String.safeSubstring(startIndex: Int, endIndex: Int): String {
    return try {
        substring(startIndex, endIndex)
    } catch (e: Exception) {
        ""
    }
}

/**
 * view安全显示
 */
fun View?.visible() {
    this?.visibility = View.VISIBLE
}

/**
 * view安全隐藏
 */
fun View?.gone() {
    this?.visibility = View.GONE
}

/**
 * view安全占位
 */
fun View?.invisible() {
    this?.visibility = View.INVISIBLE
}

/**
 * 字体加粗.(可自定义粗细)
 * @param width 控制字体加粗的程度
 */
fun TextView?.bold(width: Float = 1.5f) {
    this?.paint?.run {
        style = Paint.Style.FILL_AND_STROKE
        strokeWidth = width
    }
}

/**
 * 防止Long值为空
 */
fun Long?.safeValue(): Long {
    return this?.let { it } ?: 0
}

/**
 * 防止Float值为空
 */
fun Float?.safeValue(): Float {
    return this?.let { it } ?: 0f
}

/**
 * @des { 获取数组最后一个元素 }
 * @author 杨广
 * @date 2019/06/03 15:50
 * @return  T? 最后一个元素
 */
fun <T> List<T>?.getLast(): T? {
    return this?.run {
        getIndex(this.size - 1)
    }
}


/**
 * @des { 校准时间戳.转换为十三位 }
 * @author 杨广
 * @date 2020/06/01 10:33
 * @return  Long  十三位时间戳
 */
fun Long.adjustTime(): Long {
    return if (this.toString().length == 10) {
        this * 1000
    } else {
        this
    }
}

/**
 * @des { 判断字符串是否包含中文 }
 * @author 杨广
 * @date 2020/09/01 17:00
 * @return  Boolean true 包含中文
 */
fun String.isContainChinese(): Boolean {
    val p: Pattern = Pattern.compile("[\u4e00-\u9fa5]")
    val m: Matcher = p.matcher(this)
    return m.find()
}
